]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
shell-tray-icon: Use available space when that's defined
authorMarco Trevisan (Treviño) <mail@3v1n0.net>
Wed, 1 May 2024 02:18:50 +0000 (04:18 +0200)
committerFlorian Müllner <fmuellner@gnome.org>
Sat, 13 Sep 2025 17:00:07 +0000 (19:00 +0200)
Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7613
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3818>
(cherry picked from commit 9d3546c271c4487ee467dd120db027b0e350cbf3)

src/shell-tray-icon.c
src/tray/na-xembed.c
src/tray/na-xembed.h

index 462945e9e6e3bc94616355694dc7fca284f740b9..39204bfe66f9f693db561248a0586d80c80f6d0b 100644 (file)
@@ -185,6 +185,10 @@ shell_tray_icon_allocate (ClutterActor          *actor,
 
   CLUTTER_ACTOR_CLASS (shell_tray_icon_parent_class)->allocate (actor, box);
 
+  na_xembed_set_available_size (NA_XEMBED (tray_icon->tray_child),
+                                roundf (clutter_actor_box_get_width (box)),
+                                roundf (clutter_actor_box_get_height (box)));
+
   /* Find the actor's new coordinates in terms of the stage.
    */
   clutter_actor_get_transformed_position (actor, &wx, &wy);
index 1a919397432f3702a43c52ecf7f98d25c43fee29..728bd89ac48f37e4d6a71d2d60e131289a3bd262 100644 (file)
@@ -43,6 +43,8 @@ struct _NaXembedPrivate
   int request_height;
   int current_width;
   int current_height;
+  int available_width;
+  int available_height;
   int resize_count;
   int xembed_version;
 
@@ -141,6 +143,8 @@ na_xembed_end_embedding (NaXembed *xembed)
   priv->current_width = 0;
   priv->current_height = 0;
   priv->resize_count = 0;
+  priv->available_width = -1;
+  priv->available_height = -1;
   g_clear_handle_id (&priv->resize_id, g_source_remove);
 }
 
@@ -186,6 +190,11 @@ na_xembed_synchronize_size (NaXembed *xembed)
   width = priv->request_width;
   height = priv->request_height;
 
+  if (priv->available_width >= 0)
+    width = priv->available_width;
+  if (priv->available_height >= 0)
+    height = priv->available_height;
+
   XMoveResizeWindow (xdisplay,
                      priv->socket_window,
                      x, y,
@@ -745,6 +754,10 @@ na_xembed_class_init (NaXembedClass *klass)
 static void
 na_xembed_init (NaXembed *xembed)
 {
+  NaXembedPrivate *priv = na_xembed_get_instance_private (xembed);
+
+  priv->available_width = -1;
+  priv->available_height = -1;
 }
 
 void
@@ -809,6 +822,22 @@ na_xembed_get_size (NaXembed *xembed,
     *height = priv->request_height;
 }
 
+void
+na_xembed_set_available_size (NaXembed *xembed,
+                              int       width,
+                              int       height)
+{
+  NaXembedPrivate *priv = na_xembed_get_instance_private (xembed);
+
+  if (priv->available_width == width && priv->available_height == height)
+    return;
+
+  priv->available_width = width;
+  priv->available_height = height;
+
+  na_xembed_resize (xembed);
+}
+
 void
 na_xembed_get_root_position (NaXembed *xembed,
                              int      *x,
index 4466305aa5618694856dd0ef37d5337e005eeca0..3b0fdfe03366939ff31ca5cb2cc65a0be275b409 100644 (file)
@@ -58,7 +58,11 @@ void na_xembed_get_size (NaXembed *xembed,
                         int      *width,
                         int      *height);
 
+void na_xembed_set_available_size (NaXembed *xembed,
+                                   int       width,
+                                   int       height);
+
 void na_xembed_set_background_color (NaXembed        *xembed,
                                      const CoglColor *color);
 
-G_END_DECLS
\ No newline at end of file
+G_END_DECLS